package com.collections;

import com.google.common.collect.Range;
import com.google.common.collect.RangeMap;
import com.google.common.collect.TreeRangeMap;
import org.junit.Test;

public class RangeMapDemo {

    /**
     * RangeMap描述了”不相交的、非空的区间”到特定值的映射。即 key是区间, value是值的map
     * 和RangeSet不同，RangeMap不会合并相邻的映射，即便相邻的区间映射到相同的值
     */
    @Test
    public void rangeMap(){
        RangeMap<Integer, String> rangeMap = TreeRangeMap.create();
        rangeMap.put(Range.closed(1, 10), "foo");
        rangeMap.put(Range.open(3, 6), "bar");
        rangeMap.put(Range.open(10, 20), "foo");
        rangeMap.remove(Range.closed(5, 11));
        //根据区间里的任意值获取value
        rangeMap.get(1); //foo
        //获取map视图进行迭代
        rangeMap.asMapOfRanges().forEach((x,y)-> {
            System.out.println(x);  // [1..3]
            System.out.println(y);  // foo
        });
    }
}
